import Scanner from './Scanner.js'
import nextTokens from './nextTokens.js'
/**
 *
 * 将模板字符串编译成tokens数组
 * @export
 * @param {模板字符串} templateStr
 * @returns 编译后的tokens
 */
export default function parseTemplateToTokens (templateStr) {
    var tokens = []
    /**
     * 第一步： 实例化一个扫描器，将模板字符串传入让它扫码
     */
    var scanner = new Scanner(templateStr)
    while (!scanner.endOfString()) {
        /*
        * 第二步： 将模板字符串根据'{{'和'}}'来截取字符，将获取到的字符串段使用数组存起来
        * 获得一个简单的无嵌套关系的tokens
        */
        
        var textStr = scanner.scanUtil('{{')
        scanner.scan('{{')
        if (textStr.length != 0) {
            tokens.push(['text', textStr])   
        }
        /**
         * 第三步： 判断{{}}中间的字符，如果首字母是#则按照不同的标识存储
         */
        var nameStr = scanner.scanUtil('}}')
        if (nameStr.length != 0) {
             
            if (nameStr[0] === '#') {
                tokens.push(['#', nameStr.substring(1)])
            } else if (nameStr[0] === '/') {
                tokens.push(['/', nameStr.substring(1)])
            } else {
                tokens.push(['name', nameStr])
            }
        }
        scanner.scan('}}')
    }
    /**
     * 第四步： 拿编译后的tokens，根据#和/，使用递归算法将它们之间的tokens整合起来
     */
    return nextTokens(tokens)
}